<?php

/**
 * @copyright (C)2016-2099 Hnaoyun Inc.
 * @author XingMeng
 * @email hnxsh@foxmail.com
 * @date 2018年04月12日
 *  前台公共控制类
 */

namespace app\common;

use core\basic\Controller;
use core\basic\Config;

class HomeController extends Controller {

    public function __construct() {
        // 自动缓存基础信息
        cache_config();

        // 站点关闭检测
        if (!!$close_site = Config::get('close_site')) {
            $close_site_note = Config::get('close_site_note');
            _404($close_site_note ?: '本站维护中，请稍后再访问，带来不便，敬请谅解！');
        }

        // IP访问黑白名单检测
        $user_ip = get_user_ip(); // 获取用户IP
        if (filter_var($user_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {


            // ip黑名单
            $ip_deny = Config::get('ip_deny', true);
            foreach ($ip_deny as $key => $value) {
                if (network_match($user_ip, $value)) {
                    _404('本站启用了黑名单功能，您的IP(' . $user_ip . ')不允许访问！');
                }
            }
            // ip白名单
            $ip_allow = Config::get('ip_allow', true);
            foreach ($ip_allow as $key => $value) {
                if (network_match($user_ip, $value)) {
                    $allow = true;
                }
            }

            // 如果设置了白名单，IP不在白名单内，则阻止访问
            if ($ip_allow && !isset($allow)) {
                _404('本站启用了白名单功能，您的IP(' . $user_ip . ')不在允许范围！');
            }

           
            $scheme = $this->isSsl() ? 'https' : 'http';
            $log_url = $scheme . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
            if ($spider_name = $this->getSpiderName()) {//记录爬虫
                $data = array(
                        'user_ip' => $user_ip,
                        'user_os' => get_user_os(),
                        'user_bs' => get_user_bs(),
                        'user_area' => '',
                        'spider_name' => $spider_name,
                        'create_time' => get_datetime(),
                        'log_url' => $log_url,
                        'view_times' => '',
                        'create_user' => '',
                        'lastview_time' => '',
                        'status' => 1
                    );
                    \core\basic\Db::table('ay_spider')->insert($data);
            } else {
                if (strpos($log_url, 'upload/images') === false) {
                     $user_area = $this->findCityByIp($user_ip);
                    //记录log
                    $data = array(
                        'user_ip' => $user_ip,
                        'user_os' => get_user_os(),
                        'user_bs' => get_user_bs(),
                        'user_area' => $user_area,
                        'create_time' => get_datetime(),
                        'log_url' => $log_url,
                        'view_times' => '',
                        'create_user' => '',
                        'lastview_time' => '',
                        'status' => 1
                    );
                    \core\basic\Db::table('ay_blacklog')->insert($data);
                    $ip_deny_areas_arr = Config::get('ip_deny_areas', true);
                    $ip_deny_areas_allow_arr = Config::get('ip_deny_areas_allow', true);
                    foreach ($ip_deny_areas_arr as $ip_deny_area) {
                        if (strpos($user_area, $ip_deny_area) !== false && !isset($allow) && !in_array($user_ip, $ip_deny_areas_allow_arr)) {
                            //                    error("你的ip地址({$ip_address_str})被禁止访问");
                            _404("你的IP地址所属地域({$user_area})被禁止访问，如有疑问请联系QQ7026885");
                        }
                    }
                }
            }
        }

        // 语言绑定域名检测， 如果匹配到多语言绑定则自动设置当前语言
        $lgs = Config::get('lgs');
        if (count($lgs) > 1) {
            $domain = get_http_host();
            foreach ($lgs as $value) {
                if ($value['domain'] == $domain) {
                    cookie('lg', $value['acode']);
                    break;
                }
            }
        }

        // 未设置语言时使用默认语言
        if (!isset($_COOKIE['lg'])) {
            cookie('lg', get_default_lg());
        }

        // 手机自适应主题
        if ($this->config('open_wap')) {
            if ($this->config('wap_domain') && $this->config('wap_domain') == get_http_host()) {
                $this->setTheme(get_theme() . '/wap'); // 已绑域名并且一致则自动手机版本
            } elseif (is_mobile() && $this->config('wap_domain') && $this->config('wap_domain') != get_http_host()) {
                if (is_https()) {
                    $pre = 'https://';
                } else {
                    $pre = 'http://';
                }
                header('Location:' . $pre . $this->config('wap_domain') . URL); // 手机访问并且绑定了域名，但是访问域名不一致则跳转
            } elseif (is_mobile()) { // 其他情况手机访问则自动手机版本
                $this->setTheme(get_theme() . '/wap');
            } else { // 其他情况，电脑版本
                $this->setTheme(get_theme());
            }
        } else { // 未开启手机，则一律电脑版本
            $this->setTheme(get_theme());
        }
    }

    private function isSsl() {
        if ($_SERVER['HTTPS'] && ('1' == $_SERVER['HTTPS'] || 'on' == strtolower($_SERVER['HTTPS']))) {
            return true;
        } elseif ('https' == $_SERVER['REQUEST_SCHEME']) {
            return true;
        } elseif ('443' == $_SERVER['SERVER_PORT']) {
            return true;
        } elseif ('https' == $_SERVER['HTTP_X_FORWARDED_PROTO']) {
            return true;
        }
        return false;
    }

    //

    /**
     * 根据ip获取城市、网络运营商等信息
     * QQ7026885 
     */
function findCityByIp($ip) {
   $rand = mt_rand(1, 3); //1到3中随机选一个整数
  // $rand = 2;
//    dump($rand);
//    die;
    switch ($rand) {
        case 1:
          $data = file_get_contents("http://ip.tool.chinaz.com/$ip");
           // $data = common_curl("http://ip.tool.chinaz.com/$ip");
            $address = '';
            if (preg_match_all('/<span class="Whwtdhalf w50-0">(.*?)<\/span>/', $data, $match)) {
                $address = !empty($match[1][1]) ? $match[1][1] : '';
            }
            return $address;
            break;
        case 2:
            $url = "https://www.123cha.com/ip/?q={$ip}";
            $data = common_curl($url);
            $address = '';
            if(preg_match('/\[123查网定位\]: (.*?)<br \/>/', $data,$match)){
                $address = !empty($match[1]) ? $match[1] : '';
            }
            return $address;
            break;
       case 3:
//            $data = file_get_contents("https://ipchaxun.com/{$ip}");
            $data = common_curl("https://ipchaxun.com/{$ip}");
            $address = '';
            if (preg_match('/<div class="mod-idc" data-code=".*?" data-location="(.*?)"><\/div>/', $data, $match)) {
                $address = !empty($match[1]) ? $match[1] : '';
            }
            return $address;
            break;
        default:
            return '';
    }
}

    /**
     * 获取蜘蛛名称
     */
    private function getSpiderName() {
        $useragent = addslashes(strtolower($_SERVER['HTTP_USER_AGENT']));
        if (strpos($useragent, 'Googlebot') !== false) {
            $bot = 'Google';
		} elseif (strpos($useragent, 'googlebot') !== false) {
            $bot = 'Google';
		} elseif (strpos($useragent, 'compatible; Googlebot/2.1;') !== false) {
            $bot = 'Google';
        } elseif (strpos($useragent, 'mediapartners-google') !== false) {
            $bot = 'Google Adsense';
        } elseif (strpos($useragent, 'baiduspider') !== false) {
            $bot = 'Baidu';
        } elseif (strpos($useragent, 'sogou spider') !== false) {
            $bot = 'Sogou';
        } elseif (strpos($useragent, 'sogou') !== false) {
            $bot = 'Sogou1';
        } elseif (strpos($useragent, 'Sogouspider') !== false) {
            $bot = 'Sogou2';
        } elseif (strpos($useragent, 'Bytespider') !== false) {
            $bot = '今日头条';
        } elseif (strpos($useragent, 'Sogou web spider') !== false) {
            $bot = 'Sogou3';
        } elseif (strpos($useragent, 'Sogouwebspider') !== false) {
            $bot = 'Sogou4';
        } elseif (strpos($useragent, 'Sogou web spider/4.0') !== false) {
            $bot = 'Sogou5';
        } elseif (strpos($useragent, 'Sogou inst spider/4.0') !== false) {
            $bot = 'Sogou51';
        } elseif (strpos($useragent, 'Sogou+web+spider/4.0') !== false) {
            $bot = 'Sogou6';
        } elseif (strpos($useragent, 'Sogou+web+spider') !== false) {
            $bot = 'Sogou7';
        } elseif (strpos($useragent, 'Sogouwebspider') !== false) {
            $bot = 'Sogou8';
        } elseif (strpos($useragent, '360Spider') !== false) {
            $bot = '360';
        } elseif (strpos($useragent, '360 Spider') !== false) {
            $bot = '3601';
        } elseif (strpos($useragent, '360+Spider') !== false) {
            $bot = '3602';
        } elseif (strpos($useragent, 'YisouSpider') !== false) {
            $bot = 'Yisou';
        } elseif (strpos($useragent, 'bot') !== false) {
            $bot = '其它蜘蛛';
        } else {
            $bot = '';
        }
        return $bot;
    }

}
